package com.huayue.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.huayue.entity.EleTree;

/**
 * JSON工具类
 */
public class JSONHelper {

    /**
     * JSONArray转List<EleTree>
     */
    public static List<EleTree> JsonArrayToEleTree(JSONArray jsonArray) {
        Map<String, Object> map = new HashMap<>();
        return jsonArray.toJavaList(EleTree.class);
    }

    // string转JSONArray
    public static JSONArray StringArrayToJsonArray(String[] stringArray) {
        // 解析json
        StringBuffer Json = new StringBuffer();
        for (int i = 0; i < stringArray.length; i++) {
            Json.append(stringArray[i]);
            if (i != stringArray.length - 1) {
                Json.append(',');
            }
        }
        JSONArray jsonArray = (JSONArray)JSON.parse(Json.toString());
        return jsonArray;
    }

    // json转字符串数组去中括号
    public static String[] JSONToStringArray(String[] param) {
        String[] deps = new String[param.length];
        for (int i = 0; i < param.length; i++) {
            deps[i] = param[i].replace("[", "").replace("]", "");
        }
        return deps;
    }

    // List集合转换为json
    public static JSON listToJson(List list) {
        JSON json = (JSON)JSON.toJSON(list);
        return json;
    }

    // 第一个参数，需要生成树的数组，第二个参数为树的根节点
    public static JSONObject getJsontree(JSONArray json, JSONObject job) {
        JSONArray tempJson = new JSONArray();
        // 筛选出父id.
        for (int i = 0; i < json.size(); i++) {
            // 这里可以使用Iterator
            if (json.getJSONObject(i).get("parentid").equals(job.get("id"))) {
                tempJson.add(json.getJSONObject(i));
            }
        }
        // 优化，避免重复查询。
        json.removeAll(tempJson);
        for (int i = 0; i < tempJson.size(); i++) {
            // 对第二层进行递归，此处类推
            getJsontree(json, tempJson.getJSONObject(i));
        }
        // 生成完的树结构map集合加到根节点
        if (tempJson.size() != 0) {
            job.put("children", tempJson);
        }
        return job;
    }

    // 第一个参数，需要生成树的数组，第二个参数为树的根节点 用于菜单生成
    public static JSONObject getJsontreeTwo(JSONArray json, JSONObject job) {
        JSONArray tempJson = new JSONArray();
        // 筛选出父id.
        for (int i = 0; i < json.size(); i++) {
            // 这里可以使用Iterator
            if (json.getJSONObject(i).get("parentid").toString().equals(job.get("id").toString())) {
                tempJson.add(json.getJSONObject(i));
            }
        }
        // 优化，避免重复查询。
        json.removeAll(tempJson);
        for (int i = 0; i < tempJson.size(); i++) {
            // 对第二层进行递归，此处类推
            getJsontreeTwo(json, tempJson.getJSONObject(i));
        }
        // 生成完的树结构map集合加到根节点
        if (tempJson.size() != 0) {
            job.put("list", tempJson);
        }
        return job;
    }
}
